opens up	4D668-4D7B0
	7266C-72938

redirect 7F00->800A0614

processor for 7F76 command
7F1D	4D3F8	8009EE78	years
7F1E	4D440	8009EEC0	months
7F1F	4D474	8009EEF4	day of week
7F20	4D4A8	8009EF28	day of month
7F21	4D4DC	8009EF5C	hours
7F22	4D51C	8009EF9C	min/sec
7F23	""	""
7F76	4D580	8009F004	am/pm
7F74		8009F098	capital/lower
7F75	""	""

new command positions:
7F1D	4F6F0	800A1170
7F1E	4F72C	800A11AC
7F1F	4F768	800A11E8
7F20	4F7A4	800A1224
7F21	4F7E0	800A1260
7F22	4F81C	800A129C
7F23	""	""
7F76	4F858	800A12D8
	4F8CC	800A134C



must repair all 7F time commands so they DON'T use V0
Retaining it so you have the command #
800A11F8	0x14	7F1F day of week
	ADDIU	SP,SP,FFE8
	SW	RA,0014 (SP)
	SW	A0,0018 (SP)	;save controller for text bank
000E2825	*OR	A1,T6,R0	;A1=current position in bank
8C87000C	`LW	A3,000C (A0)	;V0=p->text bank data
24E40010	`ADDIU	A0,A3,0010	;A0=p->text bank
0C027B9E	JAL	8009EE78	;retrieve day and its string; ret V0=new text bank size
8CE60008	`LW	A2,0008 (A3)	;A2=size of bank
	LW	T7,0018 (SP)	;T7=controller for text bank
	LW	T8,000C (T7)	;T8=p->text bank data
AF020008	SW	V0,0008 (T8)	;save new max size
8FBF0014	LW	RA,0014 (SP)
00001025	OR	V0,R0,R0
03E00008	JR	RA
27BD0018	ADDIU	SP,SP,0018

needs to pass:
A0=msg_txt text bank
A1=current position in msg_txt (A0)
A2=size of msg_txt

default from caller:
V0=command type
A0=p->text bank controller
A2=p->current position in text bank
T6=current position in bank (offset)

string_txt 1 is "a.m.", 2 is "p.m."
string_txt+9 starts days of week
string_txt+64E starts days of month
string_txt+66D starts months
longest month and longest day are 9 chars long

QUICK NOTE: since there's four of these, could tack the JAL,etc to the beginning of to_generic
//time of day	a.m. or p.m.
3C058013	LUI	A1,8013
90A56FBE	LBU	A1,6FBE (A1)	;A1=80136FBE - hours
2CA1000C	SLTIU	AT,A1,000C	;within 12 hours
14200002	BNE	AT,R0,+2
24060002	ADDIU	A2,R0,0002
24060001	ADDIU	A2,R0,0001
0C03102F	JAL	800C40BC	;construct string to appear on-screen
27A4002C	ADDIU	A0,SP,002C	;A0=target location for new string
1000	BEQ	R0,R0,to_generic
AFA20028	SW	V0,0028 (SP)	;save strlen for new, happy string
//
//days of month snippet
3C058013	LUI	A1,8013
90A56FBF	LBU	A1,6FBF (A1)	;A1=80136FBF - day of month
2CA10020	SLTIU	AT,A1,0020	;should be <32
14200002	BNE	AT,R0,+2
00A03025	OR	A2,A1,R0
24060001	ADDIU	A2,R0,0001
24C6064D	ADDIU	A2,A2,064D	;base for days is string+64E
0C03102F	JAL	800C40BC	;construct string to appear on-screen
27A4002C	ADDIU	A0,SP,002C	;A0=target location for new string
1000	BEQ	R0,R0,to_generic
AFA20028	SW	V0,0028 (SP)	;save strlen for new, happy string
//
//days of week snippet
3C058013	LUI	A1,8013
90A56FC0	LBU	A1,6FC0 (A1)	;A1=80136FC0 - day of week
2CA10007	SLTIU	AT,A1,0007	;day Sunday-Saturday: this test should catch -values
14200002	BNE	AT,R0,+2
00A03025	OR	A2,A1,R0
00003025	OR	A2,R0,R0
24C60009	ADDIU	A2,A2,0009	;base for days is string+9
0C03102F	JAL	800C40BC	;construct string to appear on-screen
27A4002C	ADDIU	A0,SP,002C	;A0=target location for new string
1000	BEQ	R0,R0,to_generic
AFA20028	SW	V0,0028 (SP)	;save strlen for new, happy string
//
//months snippet	8009EEBC	4D43C
3C058013	LUI	A1,8013
90A56FC1	LBU	A1,6FC1 (A1)	;A1=80136FC1 - month
2CA1000D	SLTIU	AT,A1,000D	;should be <32
14200002	BNE	AT,R0,+2
00A03025	OR	A2,A1,R0
24060001	ADDIU	A2,R0,0001
24C6066C	ADDIU	A2,A2,066C	;base for days is string+66D
0C03102F	JAL	800C40BC	;construct string to appear on-screen
27A4002C	ADDIU	A0,SP,002C	;A0=target location for new string
1000	BEQ	R0,R0,to_generic
AFA20028	SW	V0,0028 (SP)	;save strlen for new, happy string


8009EF88	0x	day of week string gen
	push the stack pointer back 8, 
	then dec all things set to stack +0x2C by 8
//this bit is copied to each snippet (can't help that)
27BDFFC0	*ADDIU	SP,SP,FFC0
AFBF001C	SW	RA,001C (SP)
AFA40040	*SW	A0,0040 (SP)	;A0=msg_txt text bank
AFA50044	*SW	A1,0044 (SP)	;A1=current position in msg_txt (A0)
AFA60048	*SW	A2,0048 (SP)	;A2=size of msg_txt
//
//8009EFA8:	get day of week, then send to convert to string
	LUI	A1,8013
	LBU	A1,6FC0 (A1)	;A1=80136FC0 - day of week
	*SLTIU	AT,A1,0007	;day Sunday-Saturday: this test should catch -values
	*BLEZ	AT,+2
	*OR	A2,A1,R0
	*OR	A2,R0,R0
	*ADDIU	A2,A2,0009	;base for days is string+9
	JAL	800C4168	;construct string to appear on-screen
	ADDIU	A0,SP,002C	;A0=target location for new string
	BEQ	R0,R0,to_generic
	SW	V0,0028 (SP)	;save strlen for new, happy string
//

8009F00C	0x	string retrieval service
JAL	800C40BC
ADDIU	A0,SP,002C
SW	V0,0028 (SP)

8009F018	0x	to_generic
//all the snippets redirect here
8FA40040	*LW	A0,0040 (SP)
0C0240EA	JAL	800903A8	;advance position to next 'character'
8FA50044	*LW	A1,0044 (SP)
AFA2003C	*SW	V0,003C (SP)	;save increment to new position in text bank
//
8FA30044	*LW	V1,0044 (SP)	;V1=current position in msg_txt (A0)
8FAE0028	*LW	T6,0028 (SP)	;T6=strlen for newbie
8FA40040	*LW	A0,0040 (SP)	;A0=msg_txt text bank
8FA70048	*LW	A3,0048 (SP)	;A3=size of msg_txt
AFA00010	SW	R0,0010 (SP)
006E2821	*ADDU	A1,V1,T6	;A1=strlen+msg_txt position (part1)
0C027A8B	JAL	8009EA2C	;extend bank for new string: ret V0=new size
00623021	*ADDU	A2,V1,V0	;A2=old msg_txt position + increment over command (part2)
//8009EFE0:
8FAF0040	*LW	T7,0040 (SP)	;p->text bank
8FB80044	*LW	T8,0044 (SP)	;T8=cur. pos in msg_txt
AFA20024	SW	V0,0024 (SP)	;save new bank size
27A5002C	ADDIU	A1,SP,002C	;p->new string
8FA60028	LW	A2,0028 (SP)	;A2=strlen for new string
0C027AD1	JAL	8009EB44	;copy string to destination
01F82021	ADDU	A0,T7,T8	;A0=p->cur pos in text bank
//8009EFFC:
8FA20024	LW	V0,0024 (SP)	;V0=new size of text bank
8FBF001C	LW	RA,001C (SP)
03E00008	JR	RA
27BD0040	*ADDIU	SP,SP,0040


800C40F8	0x72678	new construct string
800C40BC	0x7263C-6C	move to this new position...
	*use* for 7F1E,1F,20,76
	accepts: A0=target location, A2=string#
27BDFFE8	ADDIU	SP,SP,FFE8
AFA5001C	;necessary?	SW	A1,001C (SP)
AFBF0014	SW	RA,0014 (SP)	
AFA40018	SW	A0,0018 (SP)	;save target location; gets used in retrieval as well
//800C418C:
0C030FDC	JAL	800C3F70	;retrieve string from select_data:A2=index#
24050009	*ADDIU	A1,R0,0009	;A1=max strlen
8FA40018	LW	A0,0018 (SP)	;T6=buffer
0C027A34	JAL	8009E8D0	;kill trailing whitespace
24050009	*ADDIU	A1,R0,0009	;max characters
8FBF0014	LW	RA,0014 (SP)
03E00008	+JR	RA
27BD0018	-ADDIU	SP,SP,0018

=_=

numerical types:
800C4084	0x72604	new construct numerical string
	hopefully generic this up a little bit
	accepts A0=target, A1=value
	possibly add in a 'handle' to routine, setting basic values so you can twink otherwise
handle1:	normal mode - accepts short value
24060002	ADDIU	A2,R0,0002	;A2=strlen (2)
AFA0FFF0	SW	R0,FFF0 (SP)	;normal mode
24070001	ADDIU	A3,R0,0001	;display without spacing if normal mode used
routine:
27BDFFE0	ADDIU	SP,SP,FFE0
AFBF001C	SW	RA,001C (SP)
0C024993	JAL	8009264C		;constructs the "X" minutes string
AFA40020	SW	A0,0020 (SP)	;save target location
	#does it need to do this?	AFA50024	SW	A1,0024 (SP)	;save minutes
//800C430C:
//800C4334:
8FA40020	LW	A0,0020 (SP)	;A0=string
0C027A34	JAL	8009E8D0	;returns V0=true strlen
#use return instead	24050004	ADDIU	A1,R0,0004	;A1=strlen
00022825	OR	A1,R0,V0
8FBF001C	LW	RA,001C (SP)
03E00008	JR	RA
27BD0020	ADDIU	SP,SP,0020


8009EE78	0x	code to retrieve hours (from 7F command jump)
	string winds up on stack for a time.  that limits size to 0x8...
27BDFFC0	*ADDIU	SP,SP,FFC0
AFBF001C	SW	RA,001C (SP)
AFA40040	*SW	A0,0040 (SP)	;A0=msg_txt text bank
AFA50044	*SW	A1,0044 (SP)	;A1=current position in msg_txt (A0)
AFA60048	*SW	A2,0048 (SP)	;A2=size of msg_txt
//
//years snippet: for the record, there's no reason to test if <1901...
3C058013	LUI	A1,8013
94A56FC2	LHU	A1,6FC2 (A1)	;A1=80136FC2 - year
28A107D0	SLTI	AT,A1,07D0	;should be 2000 or more
54200001	BNEL	AT,R0,+1
240507D0	ADDIU	A1,R0,07D0	;date= 2000
2CA10834	SLTIU	AT,A1,0834	;TRUE if < 2100
50200001	BEQL	AT,R0,+1
240507D0	ADDIU	A1,R0,07D0	;date= 2000
24060004	ADDIU	A2,R0,0004	;set width of string here - advance jump
0C031022	JAL	800C4088	;construct string to appear on-screen
27A4002C	ADDIU	A0,SP,002C	;A0=target location for new string
1000	BEQ	R0,R0,to_generic
AFA20028	SW	V0,0028 (SP)	;save strlen for new, happy string
//
//hours snippet:	goofy: bad rig to show 12 instead of 0
3C058013	LUI	A1,8013
90A56FBE	LBU	A1,6FBE (A1)	;A1=80136FBE - hours
//28A10018	SLTIU	AT,A1,0018	;should be <24
2401000C	ADDIU	AT,R0,000C
00A1001A	DIV	A1,AT
00002810	MFHI	A1
50A00001	BEQL	A1,R0,+1
2405000C	ADDIU	A1,R0,000C
0C031021	JAL	800C4084	;construct string to appear on-screen
27A4002C	ADDIU	A0,SP,002C	;A0=target location for new string
1000	BEQ	R0,R0,to_generic
AFA20028	SW	V0,0028 (SP)	;save strlen for new, happy string
//
//OR ALTERNATELY, A COMBO-BLOCK! MINS AND SECS	-assumes V0=command#
//we're going to use A1+(A0) to determine if preceeded by colon
//if there's a colon, we can assume that the min/sec should be 2byte zero-extended, not values
//detect mode
00852821	ADDU	A1,A0,A1
90A5FFFF	LBU	A1,FFFF (A1)
24070001	ADDIU	A3,R0,0001	;normal mode no spacing
AFA7FFF0	SW	A3,FFF0 (SP)	;by default set it to 0-ext.
2401003A	ADDIU	AT,R0,003A	;AT=':'
54250002	BNEL	A1,AT,+2	;if A1!=':'...
AFA0FFF0	SW	R0,FFF0 (SP)	;switch mode back to normal
24070000	ADDIU	A3,R0,0000	;0-ext requires A3=0
//guess min/sec
24010023	ADDIU	AT,R0,0023
3C058013	LUI	A1,8013
50220002	BEQL	AT,V0,+2
90A56FBC	LBU	A1,6FBC (A1)	;A1=80136FBC - seconds
90A56FBD	LBU	A1,6FBD (A1)	;A1=80136FBD - minutes
//minutes snippet:
2CA1003C	SLTIU	AT,A1,003C	;should be <60
50200001	BEQL	AT,R0,+1
00002825	OR	A1,R0,R0
24060002	ADDIU	A2,R0,0002	;set max width of characters
0C031024	JAL	800C4090	;construct string to appear on-screen; skip defaults
27A4002C	ADDIU	A0,SP,002C	;A0=target location for new string
1000	BEQ	R0,R0,to_generic
AFA20028	SW	V0,0028 (SP)	;save strlen for new, happy string

=_=

Must revise the handle to accepts commands 7F74-7F76 - minimum...
going to use 0xC62C4 80117D44 as base for 7F command table extension
	80117BC4 is base address, which is table-0x60 of entries
	assumes first entry is '0x60', though this is just as a base number
800A21C0	0x50740	handle 7FXX command requests
	returns V0=0,1,2
	0 is normal -keep reading, 1 unknown, 2=break reading loop
27BDFFE8	ADDIU	SP,SP,FFE8
AFBF0014	SW	RA,0014 (SP)
8C82000C	LW	V0,000C (A0)	;V0=start of text bank data
8CAE0000	LW	T6,0000 (A1)	;T6=current position in bank
2401007F	ADDIU	AT,R0,007F
24420010	ADDIU	V0,V0,0010	;V0=p->text bank itself
01C23021	ADDU	A2,T6,V0		;A2=p->current place in bank	(bank+curpos)
90C30000	LBU	V1,0000 (A2)	;retrieve char
10610003	+BEQ	V1,AT,+3	;quit if not a 7F command
90C20001	LBU	V0,0001 (A2)	;V0=command type
//800A2214:
1000000E	BEQ	R0,R0,end	;skip if invalid
00001025	OR	V0,R0,R0
//
0440FFFD	BLTZ	V0,FFFD	;KILLS 7F80-7FFF
28410061	SLTI	AT,V0,0061
10200004	BEQ	AT,R0,newtable	;largest allowed is 7F60
00027880	SLL	T7,V0,0x2	;T7=command->offset
3C038010	LUI	V1,8010
10000003	*BEQ	R0,R0,+3
24637CB8	*ADDIU	V1,V1,7CB8	;get p->command processing from table at 80107CB8
//other, new table
3C038011	*LUI	V1,8011
24637BA0	*ADDIU	V1,V1,7BC4
//800A221C:	jump to process command
006F1821	ADDU	V1,V1,T7
8C630000	LW	V1,0000 (V1)
0060F809	JALR	RA,V1
00000000	NOP
//800A222C:	END
8FBF0014	LW	RA,0014 (SP)
03E00008	JR	RA
27BD0018	ADDIU	SP,SP,0018
*NOP
NOP
NOP

=_=

new 7F command sizes
C6288 corresponds to '7F60'	80117D08
base address then for lookup (ID#*2) is 80117C48
LBU	V0,0000 (A0)	;V0=character
ADDIU	AT,R0,007F
ADDIU	V1,R0,0001
BNEL	V0,AT,80090390	;branch if not a 7F command
ADDIU	AT,R0,0080
LBU	V0,0001 (A0)	;V0=command#
BLTZ	V0,80090384	;between 00 & 7F
SLTI	AT,V0,0061
BEQ	AT,R0,80090384	;catch those > 61
SLL	T6,V0,0x1	;T6=command->offset
LUI	V1,8010
ADDU	V1,V1,T6
BEQ	R0,R0,8009039C
LB	V1,6BF4 (V1)	;V1=80106BF4+offset: size of command
//80090384:	the invalid AC commands go here
BEQ	R0,R0,8009039C	;set default size of 2
ADDIU	V1,R0,0002
ADDIU	AT,R0,0080
//80090390:
BNEL	V0,AT,800903A0	;branch if not an 80 command
OR	V0,V1,R0
ADDIU	V1,R0,0002
OR	V0,V1,R0
JR	RA
NOP

REWRITE:
3E8CC	8009034C	determine size of character in string A0
90820000	LBU	V0,0000 (A0)	;V0=character
//first catch 80 commands
24010080	ADDIU	AT,R0,0080
50410011	BEQL	V0,AT,end	;branch if not a 7F command
24030002	ADDIU	V1,R0,0002
//normal guys get set to 1
2401007F	ADDIU	AT,R0,007F
5441000E	BNEL	V0,AT,end	;branch if not an 80 command
24030001	ADDIU	V1,R0,0001
//figure size of 7F commands
80820001	LB	V0,0001 (A0)	;V0=command#
0442000B	BLTZL	V0,end	;7F80-7FFF get set to 2
24030002	ADDIU	V1,R0,0002
28410061	SLTI	AT,V0,0061
10200004	BEQ	AT,R0,+4	;catch those > 61
00027040	SLL	T6,V0,0x1	;T6=command->offset
3C038010	LUI	V1,8010
10000003	BEQ	R0,R0,+3
24636BF4	ADDIU	V1,V1,6BF4
//new table for 7F61-7F7F (technical cap of 7F7A)
3C038011	LUI	V1,8011
24637C48	ADDIU	V1,V1,7C48
006E1821	ADDU	V1,V1,T6
80630000	LB	V1,0000 (V1)	;V1=80106BF4+offset: size of command
//end:
03E00008	JR	RA
00601025	OR	V0,V1,R0
	NOP

fix second byte pull as well, which means redirecting 800903CC's caller
SLL	T6,A0,0x1
LUI	V0,8010
ADDU	V0,V0,T6
LB	V0,6BF5 (V0)
JR	RA
NOP

40270	80091CF0	0C01684A	JAL 8005A128
move to ->	86A8	8005A128
284E0061	SLTI	T6,A0,0061
100E0004	BEQ	T6,R0,+4
00047040	SLL	T6,A0,0x1
3C028010	LUI	V0,8010
10000003	BEQ	R0,R0,+3
24426BF5	ADDIU	V0,V0,6BF5
3C028011	LUI	V0,8011
24427C49	ADDIU	V0,V0,7C49
004E1021	ADDU	V0,V0,T6
03E00008	JR	RA
80420000	LB	V0,0000 (V0)

	

=_=

Controllers for 7F74/7F75
essentially, set the controller+28C's upper bits
20	Capitalize first letter (sentence case)
40	CAPITALIZE ALL
80	force lowercase
in copy routine, will read these and force the behaviour
order is important! capitalize must be first, lowercase next

default from caller:
V0=command type
A0=p->text bank controller
A2=p->current position in text bank
T6=current position in bank (offset)

8009F098	0x4D618	PROSPECTIVELY
#save controller and stuff
27BDFFE8	ADDIU	SP,SP,FFE8
AFBF0014	SW	RA,0014 (SP)
28410074	SLTI	AT,V0,0074
54200001	BNEZL	AT,+1
24020002	ADDIU	V0,R0,0002
#controller sets bits, then unwrites itself
00021140	SLL	V0,V0,0005	;command shifted left 5bits
9081028C	LBU	AT,028C (A0)
00220825	OR	AT,AT,V0
A081028C	SB	AT,028C (A0)
#That's the same as passing the current position as part 1 in resizer, part 2 cur+2
8C87000C	LW	A3,000C (A0)
AFA70018	SW	A3,0018 (SP)	;save controller for text bank
24E40010	ADDIU	A0,A3,0010	;A0=p->text bank
000E2825	OR	A1,T6,R0	;A1=current position in msg_txt (A0)
24A60002	ADDIU	A2,A1,0002	;A2=old msg_txt position + increment over command (part2)
AFA00010	SW	R0,0010 (SP)
0C027A8B	JAL	8009EA2C	;extend bank for new string: ret V0=new size
8CE70008	LW	A3,0008 (A3)	;A3=size of bank
#save new max size (V0) afterward
8FB80018	LW	T8,0018 (SP)	;T7=controller for text bank
AF020008	SW	V0,0008 (T8)	;save new max size
8FBF0014	LW	RA,0014 (SP)
00001025	OR	V0,R0,R0
03E00008	JR	RA
27BD0018	ADDIU	SP,SP,0018

filled the rest of the 'new' command table with a default value to avoid blue meanies

=_=

Copy routine being hacked will be 8009EB44
Its used by the stuff that typically gets preceeded by the commands
unfortunately, will need to use a literal offset to value, not through pointer

rewrite for copy routine 8009EB44:
	accepts: A0=p->copy location,A1=source location, A2=strlen
	returns: 
//get the control byte
3C0F8014	LUI	T7,8014
81E3269C	LB	V1,269C (T7)	;control byte
30780060	ANDI	T8,V1,0060	;T8 gets either capitalize bit
//test if a null string
18C00012	BLEZ	A2,end	+12
00001025	OR	V0,R0,R0
//8009EB58:	copy source (A1) to A0
90AE0000	LBU	T6,0000 (A1)
24420001	ADDIU	V0,V0,0001	;count++

04610005	BGEZ	V1,+5	;80 is lowercase, so true value would be negative ;*)
24840001	ADDIU	A0,A0,0001	;TARGET++
25C8FFBF	ADDIU	T0,T6,FFBF	;omit first 0x40 entries
2D08001A	SLTIU	T0,T0,001A
55000001	BNEL	T0,R0,+1
25CE0020	ADDIU	T6,T6,0020	;drops case

13000006	BEQ	T8,R0,+6	;capitalize bit
24A50001	ADDIU	A1,A1,0001	;SOURCE++
25C8FF9F	ADDIU	T0,T6,FF9F
2D08001A	SLTIU	T0,T0,001A
55000001	BNEL	T0,R0,+1
25CEFFE0	ADDIU	T6,T6,FFE0	;capitalizes
33180040	ANDI	T8,T8,0040	;eliminate 1st letter capitalize flag

14C2FFF0	BNE	A2,V0,
A08EFFFF	SB	T6,FFFF (A0)	;save to target
//kill the special flags and QUIT
3063001F	ANDI	V1,V1,001F
03E00008	JR	RA
A1E3269C	SB	V1,269C (T7)	;control byte

NOP
NOP

okay, to fix the coloration bug,
just need to hack the colouration routine so it uses the other copy type!
8009F380:
JAL	800998C0	;A0=p->target, A1=p->source, A2=size
0C026630

=_=

This broke something:	the only other routine to use any of these routines
800A639C	0x5491C	0C031021	JAL	800C4084
800A63BC	0x5493C	0C031021	JAL	800C4084

ADDIU	SP,SP,FFD8
SW	RA,0014 (SP)
SW	A0,0028 (SP)	;save target
SW	A2,0030 (SP)	;save day of month
OR	A3,A1,R0	;A3=month of year
//800A6398:
ADDIU	A0,SP,0024	;A0=target
JAL	800C4084	;generic ltostr
ANDI	A1,A3,00FF	;A1=month, assuredly one byte long
SW	V0,0020 (SP)	;save new strlen
LW	A0,0028 (SP)	;copy target
ADDIU	A1,SP,0024	;copy source
JAL	800998C0	;copy string
OR	A2,V0,R0	;copy strlen
//800A63B8:
ADDIU	A0,SP,0024	;A0=target
JAL	800C4084	;generic ltostr
LBU	A1,0033 (SP)	;A1=day of month
LW	T6,0028 (SP)	;original copy target
LW	T7,0020 (SP)	;original strlen
SW	V0,001C (SP)	;save strlen
ADDIU	A1,SP,0024	;copy source
OR	A2,V0,R0	;strlen
JAL	800998C0	;copy string
ADDU	A0,T6,T7	;copy target: original target+strlen
//800A63E0:
LW	T8,0020 (SP)	;original strlen
LW	T9,001C (SP)	;second strlen
LW	RA,0014 (SP)
ADDU	V0,T8,T9	;total strlen
JR	RA
ADDIU	SP,SP,0028

=_=

7F2E patch!
8009F410:	0x4D990
24A501E4	ADDIU	A1,A1,01E4	;A1=801425F4: new buffer for selected text

